/**
 * 这个算法是我在红宝书第八章的一个例子中看到的，看到这种简单而又强大的算法总是充满感叹和佩服。
 * 查了一下发现是个很经典的算法。
 * 1938年 Fisher和Yates 发明了shuffle(洗牌)算法的原始版本
 * 由 Knuth 在 《计算机程序设计艺术》进行了推广
*/

//继承内置引用类型Array
class SuperArray extends Array{
  shuffle(){
    for(let i = this.length - 1; i > 0; i--){
       let j = Math.floor(Math.random() * (i+1) ); //随机取一个1 ~ 数组长度-1 的整数
       [this[i],this[j]] = [this[j],this[i]];      //交换该随机位置的元素 与 当前指针所指位置的元素(从数组长度依次递减)
    }
  }
  
  shuffle_(){
    this.shuffle();
    console.log(this);
  }

}

const a = new SuperArray(1,2,3,4,5);
a.shuffle_();
